package com.xm.share.common.config;

import java.beans.PropertyEditorSupport;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 自定义StringToDate转换器
 * @author wenhai.wang
 * date 2016年5月2日  下午7:19:19
 */
public class DateEditor extends PropertyEditorSupport {  
  
    private static final DateFormat TIMEFORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  
    private DateFormat dateFormat;  
    /**
     * 无参的构造方法
     */
    public DateEditor() {  
    }  
    /**
     * 有参的构造方法
     * @param dateFormat  
     */
    public DateEditor(DateFormat dateFormat) {  
        this.dateFormat = dateFormat;  
    }  
    /**
     * 有参的构造方法
     * @param dateFormat  
     * @param allowEmpty 
     */
    public DateEditor(DateFormat dateFormat, boolean allowEmpty) {  
        this.dateFormat = dateFormat;  
    }  
  
    /** 
     * Parse the Date from the given text, using the specified DateFormat. 
     */  
    @Override  
    public void setAsText(String text) throws IllegalArgumentException {  
        if ("".equals(text)||text==null) {  
            // Treat empty String as null value.  
            setValue(null);  
        } else {  
            try {  
                if(this.dateFormat != null){
                    setValue(this.dateFormat.parse(text));  
                }else {  
                    if(text.contains(":")) {
                    	setValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(text));  
                    } else {
                    	setValue(new SimpleDateFormat("yyyy-MM-dd").parse(text));
                    }
                }  
            } catch (ParseException ex) {  
                throw new IllegalArgumentException("Could not parse date: " + ex.getMessage(), ex);  
            }  
        }  
    }  
  
    /** 
     * Format the Date as String, using the specified DateFormat. 
     */  
    @Override  
    public String getAsText() {  
        Date value = (Date) getValue();  
        DateFormat dateFormat = this.dateFormat;  
        if(dateFormat == null){
            dateFormat = TIMEFORMAT;
        }
        return (value != null ? dateFormat.format(value) : "");  
    }  
}  

